home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / glass / glass.lha / GLASS / glammar / ge06.c < prev    next >
C/C++ Source or Header  |  1991-01-21  |  4KB  |  196 lines

  1. /*
  2.  
  3.     This file is a part of the GLAMMAR source distribution 
  4.     and therefore subjected to the copy notice below. 
  5.     
  6.     Copyright (C) 1989,1990  Eric Voss, ericv@cs.kun.nl 
  7.  
  8.     This program is free software; you can redistribute it and/or modify
  9.     it under the terms of the GNU General Public License as published by
  10.     the Free Software Foundation version 1
  11.  
  12.     This program is distributed in the hope that it will be useful,
  13.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.     GNU General Public License for more details.
  16.  
  17.     You should have received a copy of the GNU General Public License
  18.     along with this program; if not, write to the Free Software
  19.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20. */
  21. #include "ge1.h"
  22. #ifdef DTYPEIN
  23. int dtypein(A_0)            /* dumpaffix */
  24. register AFFIX A_0;
  25. {
  26.   AFFIX   _affix = A_0;
  27.   char *rc = c;
  28.   if (feof(stdin))  return false;
  29.   A_0 -> t = rc;
  30.   A_0 -> r = nil;
  31.   A_0 -> l = nil;
  32.   while (!feof(stdin) ) {
  33.       *rc = getc(stdin);
  34.        if (*rc++ == '\n') {
  35.              *(rc-1) = '\0'; 
  36.              c = rc;
  37.   if (rc > cstore_top ) cstore_overflow();
  38.             return true;
  39.        }
  40.   }
  41.   *rc++ = '\0'; 
  42.   c = rc;
  43.   if (rc > cstore_top ) cstore_overflow();
  44.   return true;
  45. }
  46. #endif
  47.  
  48. #ifdef DTYPEOUT
  49. int dtypeout(I_0)            /* dumpaffix */
  50. register AFFIX I_0;
  51. {
  52.   AFFIX   _affix = I_0;
  53.   if ((interesting_level_number > level)||(interesting_level_number == -1))
  54.     fprintf(stderr, "%d ", level);
  55.   (void) printa(stderr, _affix);
  56.   return true;
  57. }
  58. #endif
  59.  
  60. #ifdef DREALTOINT
  61. int drealtoint(I_0,D_1)            /* real to int */
  62. register AFFIX I_0,D_1;
  63. {
  64.   float           real = 0;
  65.   char *expr = c;
  66.   if ((I_0->r == nil) && (I_0->l == nil))
  67.     expr = I_0 -> t;
  68.   else {
  69.     sprinta(I_0);
  70.     *c++ = '\0';
  71.   }
  72.   D_1->t = c;
  73.   D_1->l = nil;
  74.   D_1->r = nil;
  75.   sscanf(expr, "%f", &real);
  76.   (void) sprintf(c, "%d\0", (int) real);
  77.   c += 20;
  78.   return true;
  79. }
  80. #endif
  81.  
  82. #ifdef DDECIMALTOUN
  83. int ddecimaltounary(I_0,D_1)            /* decimal to unary */
  84. register AFFIX I_0,D_1;
  85. {
  86.   int           dec ;
  87.   char * rc = c;
  88.   if ((I_0->r == nil) && (I_0->l == nil))
  89.     rc = I_0 -> t;
  90.   else {
  91.     sprinta(I_0);
  92.     *c++ = '\0';
  93.   }
  94.   dec = atoi(rc);
  95.  
  96.   D_1->t = rc;
  97.   D_1->l = nil;
  98.   D_1->r = nil;
  99.   for (; dec-- >0 ;)
  100.      *rc++ = '1'; 
  101.   *rc++ ='\0';
  102.   c = rc;
  103.   if (rc > cstore_top ) cstore_overflow();
  104. }
  105.  
  106. #endif
  107. #ifdef DKEYWORD
  108. int dkeyword(I)
  109. register AFFIX I;
  110. {
  111.   register char  *term, *rip = ip;
  112.   term = I -> t;
  113.   for (; *term != '\0'; rip++) {
  114.     char x = *rip;
  115.     if (islower(x))
  116.       x = toupper(x);
  117.     if (*term++ != x) {
  118.       if (mip < rip) {
  119.         mip = rip;
  120.         change_line_file = true; 
  121.         set_ip_start_pos = set_line_pos;
  122.         set_ip_start_num = set_line_num;
  123.       }
  124.       return false;
  125.     }
  126.   }
  127.   ip = rip;
  128.   if (mip < rip) {
  129.     mip = rip;
  130.     change_line_file = true; 
  131.     set_ip_start_pos = set_line_pos;
  132.     set_ip_start_num = set_line_num;
  133.   }
  134.   return true;
  135. }
  136. #endif
  137.  
  138. #ifdef DUPPERCASE
  139. int duppercase(I,D)            /* upper case */
  140. register AFFIX I,D;
  141. {
  142.   register char *rs,*rd;
  143.   char *dest;
  144.   if ((I->r == nil) && (I->l == nil))
  145.     rs = I->t;
  146.   else {
  147.     rs = c;
  148.     sprinta(I);
  149.     *c++ = '\0';
  150.   }
  151.   dest = c;
  152.   for (rd = dest; *rs != '\0';) {
  153.     char tc = *rs++;
  154.     if (islower(tc))
  155.       *rd++ = toupper(tc);
  156.     else *rd++ = tc;
  157.   }
  158.   *rd ++ = '\0';
  159.   c = rd;
  160.   D->t = dest;
  161.   D->l = nil;
  162.   D->r = nil;
  163.   return true;
  164. }
  165. #endif
  166.  
  167. #ifdef DLOWERCASE
  168. int dlowercase(I,D)            /* upper case */
  169. register AFFIX I,D;
  170. {
  171.   register char *rs,*rd;
  172.   char *dest;
  173.   if ((I->r == nil) && (I->l == nil))
  174.     rs = I->t;
  175.   else {
  176.     rs = c;
  177.     sprinta(I);
  178.     *c++ = '\0';
  179.   }
  180.   dest = c;
  181.   for (rd = dest; *rs != '\0';) {
  182.     char tc = *rs++;
  183.     if (isupper(tc))
  184.       *rd++ = tolower(tc);
  185.     else *rd++ = tc;
  186.   }
  187.   *rd ++ = '\0';
  188.   c = rd;
  189.   D->t = dest;
  190.   D->l = nil;
  191.   D->r = nil;
  192.   return true;
  193. }
  194. #endif
  195.  
  196.